MySQL SSL
#MysQL #SSL
MySQLでのSSL通信の挙動はちゃんと把握しておかないと後で???ってなる。
まあ、必要になった時に勉強すれば良いんだけど、すぐ忘れるからここに記録しておく。
基本的に、公式Doc読めばOKです。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 6.3.1 暗号化接続を使用するための MySQL の構成
SSL接続が必要/不要
大前提として、MySQLはデフォルトではSSL接続必要なく接続可能です。
なので暗号化せずに通信するってのも危険ですけど可能なのです。
もしSSL接続しかダメです!!!てしたいなら、サーバー変数「require_secure_transport」を有効にしてください。
SSL接続ができるようにサーバー側で設定する必要あり
クライアントとSSL通信可能にするためには、サーバー側で以下3つを用意して配置する必要があります。
1. CA証明書(ca)
2. サーバー証明書(cert)
3. サーバー証明書用の秘密鍵(key)
全て.pem形式のファイルで保存することになるでしょう。
クライアントから接続が来た時の簡単な挙動
クライアントはssl_modeを指定して、どういう風に接続するか伝えてきます。
もし暗号化優先とか、暗号化必須とかのオプションなら、サーバーは暗号化接続を許可しようとします。
けど、暗号化しないとか、サーバー側の暗号化接続準備に不備あったり、サーバー証明書の期限切れてたりしたら、暗号化せずに接続がされます。
ただし、サーバー側、もしくは、クライアント側で、暗号化接続が必須と指定されていると、接続が失敗するでしょう。
ssl-mode
クライアントから接続を試みる際の、暗号化接続オプションについて知っておくのが良いです。
1. PREFFERED:サーバー側に暗号化準備が整ってるなら暗号化接続します。そうでないなら暗号化なしで接続します。
2. REQUIRED:暗号化しかできません。暗号化できないなら説おz狗失敗です。
3. VERIFY_CA:接続時にサーバーから送られてくるサーバー証明書をクライアントがCA証明書で検証します。もし検証失敗したら、「誰やこいつ...」となって接続失敗です。
4. VERIFY_IDENTIFY:接続時にサーバーから送られてきたサーバー証明書をクライアントがCA証明書で検証すると共に、サーバーもクライアントから送られてきたサーバー証明書をCA証明書で検証します。
互いに検証し合うっていうパターンです。面倒。